所有参考资料贴在最后。
1. virtualbox
2. ubuntu
在虚拟机里安装ubuntu。
su获取root权限。
3. git
$ apt-get update
$ apt-get install git
apt-get,是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。
4. go
$ wget https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz
wget命令用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。 ^foot1
$ tar -C /usr/local -xzf go1.8.linux-amd64.tar.gz
tar命令是Unix/Linux系统中备份文件的可靠方法,几乎可以工作于任何环境中,它的使用权限是所有用户。
-c 创建新的档案文件。
-x 从档案文件中释放文件。
-z 用gzip来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩。
-f 使用档案文件或设备,这个选项通常是必选的。
go环境变量配置
$ vi /etc/profile
追加内容
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
$ source /etc/profile
5. pipe
$ apt-get install python-pip
6. Docker
Docker版本
- Docker Enterprise Edition (Docker EE) 专为企业开发和IT团队设计,用于在大规模生产中构建,运送和运行关键业务应用程序。Docker EE集成,认证和支持,为企业提供业界最安全的容器平台,使所有应用程序现代化。
- Docker Community Edition (Docker CE) 是开发人员和小团队的理想选择,希望开始使用Docker并尝试基于容器的应用程序。Docker CE可在许多平台上使用,从桌面到云到服务器。
Update the apt package index:
更新apt包索引$ apt-get update
Install packages to allow apt to use a repository over HTTPS:
配置apt允许以 HTTPS方式拉取镜像安装$ apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common
Add Docker’s official GPG key:
添加Docker仓库的GPG密钥$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
校验key
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
.$ sudo apt-key fingerprint 0EBFCD88 pub 4096R/0EBFCD88 20xx-xx-xx Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid Docker Release (CE deb) <docker@docker.com> sub 4096R/F273FCD8 20xx-xx-xx
Use the following command to set up the stable repository.
配置稳定镜像$ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
安装DOCKER CE
$ sudo apt-get update $ apt-get install docker-ce
测试
$ docker run hello-world
7. Docker-compose
编排(orchestration),指自动配置、协作和管理服务的过程,在 Docker 中,编排用来描述一组实践过程,这个过程会管理运行在多个 Docker 里的应用,这些 Docker 容器也可能运行在不同的宿主机上。
Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration.
Docker 编排工具 Docker Compose ,由 Python 编写。使用 Docker Compose ,可以用一个 YAML 文件定义一组要启动的容器,以及容器运行时的属性。Docker Compose 称这些容器为“服务”:容器通过某些方法并制定一些运行时的属性来和其他容器产生交互。
$ pip install docker-compose
8. 部署fabric项目
选择的示例sfhackfest
创建项目目录
$ mkdir -p /opt/workspace/hackfest $ cd /opt/workspace/hackfest
参数:-p 确保目录名称存在,如果目录不存在的就新创建一个。
下载示例
$ curl -L https://github.com/hyperledger/fabric/raw/v1.0.0-preview/examples/sfhackfest/sfhackfest.tar.gz -o sfhackfest.tar.gz 2> /dev/null; tar -xvf sfhackfest.tar.gz
下载并解压缩部署Fabric网络的相关组件 ,包括Docker Compose 脚本, 通道创建/加入脚本, 认证使用的加密要素等
ls 显示所有文件
ls -1 显示所有文件(按行显示)
ls -l 显示所有文件具体信息
树形结构apt-get install tree
tree 以树状图显示所有文件使用Docker下载示例镜像
$ docker-compose build
通过执行docker-compose命令, fabric-peer, fabric-orderer, fabric-ca和 cli 都会自动下载、解压缩相关的镜像。
创建fabric网络
$ docker-compose up
通过Docker-compose构建Fabric网络,创建channel(账本), 将Peer节点加入channel
查看容器
$ docker ps
6个Docker容器,3个peer、一个order、一个cli、一个ca。
嵌入在docker-compose.yml里的channel_test.sh会在CLI容器里执行创建channel和加入channel命令。执行结束,应该只有一个Fabric网络和一个channel,channel包含三个节点peer0,Peer1,Peer2。
进入客户端
确保channel已创建,并且peers都成功加入
$ docker exec -it cli bash
$ more results.txt
查看结果也可用
$ cat results.txt
> cat主要有三大功能:
1.一次显示整个文件。`$ cat filename`
2.从键盘创建一个文件。`$ cat > filename `只能创建新文件,不能编辑已有文件.
3.将几个文件合并为一个文件:` $cat file1 file2 > file`
验证创世块
$ ls -ltr myc1.block
9. 资产转移测试
进入cli容器
$ docker exec -it cli bash
发送createChannel API 给 Orderer
$ CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050
创建新myc2.block
$ peer channel create -c myc2
将channel分别加入到3个peer
$ CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 CORE_PEER_ADDRESS=peer0:7051 peer channel join -b myc2.block $ CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 CORE_PEER_ADDRESS=peer1:7051 peer channel join -b myc2.block $ CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 CORE_PEER_ADDRESS=peer2:7051 peer channel join -b myc2.block
执行加入channel的指令,把创世块作为参数发送joinchannel API给 peer。
全部Peer节点都加入通道,可以查询账本而无需在每个节点都部署智能合约。
运行部署命令
部署chaincode,初始化资产a,b的值分别为100,200
$ CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 peer chaincode deploy -C myc2 -n mycc -p github.com/hyperledger/fabric/examples -c '{"Args":["init","a","100","b","200"]}'
运行调用命令
调用invoke命令,资产a向b转移10单位数据
$ CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 peer chaincode invoke -C myc2 -n mycc -c '{"function":"invoke","Args":["move","a","b","10"]}'
运行查询命令
$ CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 peer chaincode query -C myc2 -n mycc -c '{"function":"invoke","Args":["query","a"]}'
$ CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 peer chaincode query -C myc2 -n mycc -c '{"function":"invoke","Args":["query","b"]}'
清理容器
$ docker-compose -f docker-compos.yml down
退出容器
exit命令退出CLI容器。
10. 参考资料
官方文档
IBM Blockchain 101:开发人员快速入门指南
Hyperledger Fabric V1.0– 开发者快速入门
Hyperledger Fabric V1.0 环境搭建
hyperledger fabric Read-only mirror
Fabric底层开发环境搭建